/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
 import axios from 'axios';
 import QS from 'qs';
 import { GET, POST } from "./config";
 import { ElMessageBox  } from 'element-plus'
// import { useRouter } from 'vue-router';
// const router = useRouter();
import router from '@/router/index.ts'
 //qs.stringify()是将对象 序列化成URL的形式，以&进行拼接
 //  let protocol = window.location.protocol; //协议
 //  let host = window.location.host; //主机
 //  axios.defaults.baseURL = protocol + "//" + host;
 axios.defaults.baseURL = import.meta.env.VITE_API;
 
 axios.interceptors.request.use( //响应拦截
    async config => {
		const token = localStorage.getItem('token');
        // 每次发送请求之前判断vuex中是否存在token        
        // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
        // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断 
        config.headers['accessToken']  = token
        return config;
    },
    error => {
        return Promise.error(error);
    })
    // 响应拦截器
 axios.interceptors.response.use(
     response => {
		 const res = response.data
		 const { code } = res
         if (code === 200) {
             return Promise.resolve(response); //进行中        
         } else if(code ===401) {
			 
			 ElMessageBox .confirm(res.message, '去登录', {
			   confirmButtonText: '登录',
			   cancelButtonText: '关闭',
			   type: 'warning'
			 }).then(() => {
			   router.push('/')
			   localStorage.removeItem('token')
			 }).catch(() => {
			   router.push('/')
			   localStorage.removeItem('token')
			 })
         }else{
			 console.log('啊',response)
			 return Promise.reject(response); //失败
		 }
     },
     // 服务器状态码不是200的情况    
     error => {
		 console.log('error',error)
         if (error.response.status) {
             switch (error.response.status) {
                 // 401: 未登录                
                 // 未登录则跳转登录页面，并携带当前页面的路径                
                 // 在登录成功后返回当前页面，这一步需要在登录页操作。                
                 case 401:
                     break
                     // 403 token过期                
                     // 登录过期对用户进行提示                
                     // 清除本地token和清空vuex中token对象                
                     // 跳转登录页面      
					 console.log('router',router)
					  router.push('/')
					  localStorage.removeItem('token')
                 case 403:
                    //  sessionStorage.clear()
                    //  router.push('/login')
					router.push('/')
					localStorage.removeItem('token')
                     break
                     // 404请求不存在                
                 case 404:
                     break;
                     // 其他错误，直接抛出错误提示                
                 default:
             }
             return Promise.reject(error.response);
         }
     }
 );
 /** 
  * get方法，对应get请求 
  * @param {String} url [请求的url地址] 
  * @param {Object} params [请求时携带的参数] 
  */
const get = (url, params) =>{
     return new Promise((resolve, reject) => {
         axios.get(url, {
                 params: params,
             })
             .then(res => {
                 resolve(res);
             })
             .catch(err => {
                 reject(err)
             })
     });
 }
 /** 
  * post方法，对应post请求 
  * @param {String} url [请求的url地址] 
  * @param {Object} params [请求时携带的参数] 
  */
const post = (url, params,config) => {
	

     return new Promise((resolve, reject) => {
         axios.post(url, params,config)   
             .then(res => {
                 resolve(res);
             })
             .catch(err => {
                 reject(err)
             })
     });
 }

 //封装GET POST
export function request(method, url, params, head) {
    switch (method) {
      case GET:
        return get(url, params);
      case POST:
        return post(url, params,head);
    }
  }